package reflection;

/**
 * 类加载
 */
public class ClassLoad {
    public static void main(String[] args) {
        /*
            反射机制是java实现动态语言的关键，也就是通过反射实现类动态加载
            1.静态加载：编译时加载相关的类，如果没有则报错，依赖性太强。创建对象(new)属于静态加载;
            2.动态加载：运行时加载需要的类，如果运行时不用该类，则不报错，降低了依赖性。反射属于动态加载、

            类加载的时机
            1.当创建对象(new)时   //静态加载
            2.当子类被加载时，父类也加载 //静态加载
            3.调用类中的静态成员时    //静态加载
            4.通过反射  //动态加载

            类加载各阶段完成的任务(JVM负责加载和连接阶段，初始化阶段由用户操作)
            1)加载Loading:将类的class文件读入内存，并为之创建一个java.lang.Class对象(类加载器完成)
            2)连接Linking:将类的二进制数据合并到JRE中
                    I)验证verification:文件安全性校验
                    II)准备Preparation:静态变量默认初始化并分配空间
                    III)解析Resolution:符号引用转换成直接引用
            3)初始化initialization:JVM负责对类进行初始化，主要是指静态成员
         */
    }
}
